package com.sleep.drug_traceability.controller;

import com.sleep.drug_traceability.service.InfoService;
import com.sleep.drug_traceability.vo.Result;
import com.sleep.drug_traceability.vo.params.OneParam;
import com.sleep.drug_traceability.vo.params.PwdParam;
import com.sleep.drug_traceability.vo.params.SelectParam;
import com.sleep.drug_traceability.vo.params.TwoParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author Sleep-6000
 * @date 2022/4/27
 */
@RestController
@RequestMapping("info")
public class InfoController {

    @Autowired
    private InfoService infoService;

    /**
     * 获取药品生产商的用户信息，显示在个人中心页面
     * @param token token
     * @return 用户信息
     */
    @GetMapping("getMan")
    public Result getManInfo(@RequestHeader("Authorization") String token) {
        return infoService.getManInfo(token);
    }

    /**
     * 获取销售商的用户信息，显示在个人中心页面
     * @param token token
     * @return 用户信息
     */
    @GetMapping("getSel")
    public Result getSelInfo(@RequestHeader("Authorization") String token) {
        return infoService.getSelInfo(token);
    }

    /**
     * 获取监管部门的用户信息，显示在个人中心页面
     * @param token token
     * @return 用户信息
     */
    @GetMapping("getSup")
    public Result getSupInfo(@RequestHeader("Authorization") String token) {
        return infoService.getSupInfo(token);
    }

    /**
     * 修改密码
     * @param pwdParam 新旧密码参数
     * @param token token
     * @return Result
     */
    @PostMapping("changePwd")
    public Result changePwd(@RequestBody PwdParam pwdParam, @RequestHeader("Authorization") String token) {
        return infoService.changePwd(pwdParam, token);
    }

    /**
     * 修改电话号码
     * @param oneParam 新电话号码
     * @param token token
     * @return Result
     */
    @PostMapping("changePho")
    public Result changePho(@RequestBody OneParam oneParam, @RequestHeader("Authorization") String token) {
        return infoService.changePho(oneParam, token);
    }

    /**
     * 修改负责人
     * @param oneParam 新负责人
     * @param token token
     * @return Result
     */
    @PostMapping("changeLegal")
    public Result changeLegal(@RequestBody OneParam oneParam, @RequestHeader("Authorization") String token) {
        return infoService.changeLegal(oneParam, token);
    }

    /**
     * 修改联系方式
     * @param oneParam 新联系方式
     * @param token token
     * @return Result
     */
    @PostMapping("changeContact")
    public Result changeContact(@RequestBody OneParam oneParam, @RequestHeader("Authorization") String token) {
        return infoService.changeContact(oneParam, token);
    }

    /**
     * 药品生产商的药品运输数据的页面，获取药品名称列表和销售商名称列表
     * @param token token
     * @return 药品名称列表和销售商名称列表
     */
    @GetMapping("drugName")
    public Result getDrugName(@RequestHeader("Authorization") String token) {
        return infoService.getDrugName(token);
    }

    /**
     * 药品生产商的药品运输数据的页面，根据选择的药品名称，获取对应的药品批号列表
     * @param param 选择的药品名称
     * @return 药品批号列表
     */
    @PostMapping("batch")
    public Result getBatchNum(@RequestBody OneParam param) {
        return infoService.getBatchNum(param);
    }

    /**
     * 药品生产商的药品运输数据的页面，根据选择的药品名称和药品批号，获取对应的药品溯源编码
     * @param twoParam 选择的药品名称和药品批号
     * @return 药品溯源编码
     */
    @PostMapping("code")
    public Result getCode(@RequestBody TwoParam twoParam) {
        return infoService.getCode(twoParam);
    }

    /**
     * 销售商的药品购买数据的页面
     * 从drug_tra（存储药品运输数据的表）中获取与该销售商名称一致的药品名称列表
     * @param token token
     * @return 药品名称列表
     */
    @GetMapping("drugTra")
    public Result getDrugTra(@RequestHeader("Authorization") String token) {
        return infoService.getDrugTra(token);
    }

    /**
     * 销售商的药品购买数据的页面，根据选择的药品名称，获取药品生产商名称列表
     * @param param 选择的药品名称
     * @return 药品生产商名称列表
     */
    @PostMapping("manName")
    public Result getManName(@RequestBody OneParam param) {
        return infoService.getManName(param);
    }

    /**
     * 销售商的药品购买数据的页面，根据选择的药品名称和药品生产商名称，获取药品批号列表
     * @param twoParam 选择的药品名称和药品生产商名称
     * @return 药品批号列表
     */
    @PostMapping("batchTra")
    public Result getBatchTra(@RequestBody TwoParam twoParam) {
        return infoService.getBatchTra(twoParam);
    }

    /**
     * 销售商的药品购买数据的页面，根据选择的药品名称、药品生产商名称和药品批号，获取对应的药品溯源编码
     * @param param 选择的药品名称、药品生产商名称和药品批号
     * @return 药品溯源编码
     */
    @PostMapping("codeTra")
    public Result getCodeTra(@RequestBody SelectParam param) {
        return infoService.getCodeTra(param);
    }

    /**
     * 销售商的消费者数据的页面，获取该销售商所拥有的药品名称列表
     * @param token token
     * @return 药品名称列表
     */
    @GetMapping("drugCon")
    public Result getDrugCon(@RequestHeader("Authorization") String token) {
        return infoService.getDrugCon(token);
    }

    /**
     * 销售商的消费者数据的页面，根据选择的药品名称，获取药品对应的药品批号列表
     * @param param 选择的药品名称
     * @return 药品批号列表
     */
    @PostMapping("batchCon")
    public Result getBatchCon(@RequestBody OneParam param) {
        return infoService.getBatchCon(param);
    }

    /**
     * 销售商的消费者数据的页面，根据选择的药品名称和药品批号，获取药品溯源编码
     * @param twoParam 选择的药品名称和药品批号
     * @return 药品溯源编码
     */
    @PostMapping("codeCon")
    public Result getCodeCon(@RequestBody TwoParam twoParam) {
        return infoService.getCodeCon(twoParam);
    }
}
